/* Copyright 2009 Requirements Management System 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.mags.remas.control;

import org.mags.common.EngineContext;
import org.mags.remas.control.commons.ICrudActions;
import org.mags.remas.model.entity.EntityRelationship;
import org.mags.remas.model.entity.KeyDefinition;
import org.mags.remas.model.entity.ListValue;

/**
 * 
 * @author Mario Gaitan
 *
 */
public class ListValueController implements ICrudActions {
	private EntityRelationship entityRelationship;
	private final KeyDefinition keyDefinition;
	public KeyDefinition getKeyDefinition() {
		return keyDefinition;
	}
	public EntityRelationship getEntityRelationship() {
		return entityRelationship;
	}
	public void setEntityRelationship(EntityRelationship entityRelationship) {
		this.entityRelationship = entityRelationship;
	}
	public ListValueController(EntityRelationship entityRelationship, KeyDefinition keyDefinition) {
		if(entityRelationship==null)throw new RuntimeException("entityRelationship can't be null");
		if(keyDefinition==null)throw new RuntimeException("keyDefinition can't be null");
		this.entityRelationship = entityRelationship;
		this.keyDefinition = keyDefinition;
	}
	@Override
	public Object create(Object object) {
		ListValue listValue = new ListValue();
		listValue.setListValue(keyDefinition.getDefaultValue());
		listValue.setKeyDefinitionId(keyDefinition.getKeyDefinitionId());
		listValue.setEntityId(entityRelationship.getEntity().getEntityId());
		if(listValue.getEntityId()==0)
			throw new RuntimeException("you have to save the entity");
		EngineContext.getDataContext().getEntityProviderFactory().getListValueProvider().create(listValue);
		return listValue;
	}
	@Override
	public void delete(Object object) {
		ListValue listValue = (ListValue)object;
		EngineContext.getDataContext().getEntityProviderFactory().getListValueProvider().delete(listValue);		
	}
	@Override
	public Object getObjects(Object parent) {
		return EngineContext.getDataContext().getEntityProviderFactory().getListValueProvider().getByIds(keyDefinition.getKeyDefinitionId(), entityRelationship.getEntity().getEntityId());		
	}
	@Override
	public void update(Object object) {
		ListValue listValue = (ListValue)object;
		EngineContext.getDataContext().getEntityProviderFactory().getListValueProvider().update(listValue);		
	}
}
